#include<iostream>
#include<cstdio>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main()
{
    pid_t id=fork();
    if(id<0)
    {
        printf("errno:%d,strerr:%s\n",errno,strerror(errno));
        return errno;
    }
    else if(id==0)
    {
        int count=20;
        while(count>0)
        {
            printf("子进程运行中,pid为%d\n",getpid());
            count--;
            sleep(1);
        }
        exit(3);
    }
    else if(id>0)
    {
        int status=0;
        //阻塞式等待    
        pid_t pid=waitpid(id,&status,0);
        if(pid>0)  //等待成功
        {
            if(WIFEXITED(status))    //非0说明正常退出
            {
                printf("进程正常退出,pid为:%d,退出码为:%d\n",pid,WIFEXITED(status));
            }
            else //程序异常终止
            {
                printf("子进程异常终止\n");
            }
        }
        else if(pid<0) //等待失败
        {
            perror("waitpid");
        }
    }
    return 0;
}
